#include "led.h"

void LED_Init(void)
{
    // 1. GPIOA模块的时钟配置
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

    // 2. GPIO PA0的工作模式配置：输出模式，推挽输出
    GPIOA->CRL &= ~GPIO_CRL_MODE0;
    GPIOA->CRL &= ~GPIO_CRL_CNF0;
    GPIOA->CRL |= (GPIO_CRL_MODE0_0 | GPIO_CRL_MODE0_1);

    // 2. GPIO PA1的工作模式配置：输出模式，推挽输出
    GPIOA->CRL &= ~GPIO_CRL_MODE1;
    GPIOA->CRL &= ~GPIO_CRL_CNF1;
    GPIOA->CRL |= (GPIO_CRL_MODE1_0 | GPIO_CRL_MODE1_1);

    // 2. GPIO PA8的工作模式配置：输出模式，推挽输出
    GPIOA->CRH &= ~GPIO_CRH_MODE8;
    GPIOA->CRH &= ~GPIO_CRH_CNF8;
    GPIOA->CRH |= (GPIO_CRH_MODE8_0 | GPIO_CRH_MODE8_1);

    // 3. PA0, PA1, PA8输出高电平, 熄灭LED
    LED_Off(LED1);
    LED_Off(LED2);
    LED_Off(LED3);
}

void LED_On(uint16_t led)
{
    GPIOA->ODR &= ~led;
}

void LED_Off(uint16_t led)
{
    GPIOA->ODR |= led;
}

void LED_Toggle(uint16_t led)
{
    // 需要先判断当前LED状态，读取IDR对应位
    if((GPIOA->IDR & led) == 0)
    {
        LED_Off(led);
    }
    else
    {
        LED_On(led);
    }
}
